package cn.wolfcode.luowowo.mgrsite.job;

import cn.wolfcode.luowowo.article.service.IStrategyDetailService;
import cn.wolfcode.luowowo.article.vo.StrategyStatisPersistenceVO;
import cn.wolfcode.luowowo.cache.domain.StrategyStatisVO;
import cn.wolfcode.luowowo.cache.service.IStrategyStatisVOService;
import cn.wolfcode.luowowo.cache.util.RedisKeys;
import cn.wolfcode.luowowo.common.util.BeanUtil;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;
//一旦开始了就停不了了
//1:定义任务执行器
/**
 * redis数据持久化
 */

        //Seconds  Minutes  Hours  DayofMonth  Month  DayofWeek  Year

        //Seconds  Minutes  Hours  DayofMonth  Month  DayofWeek (springboot使用)
        // 秒        分       时       日期      月       星期      年
        //  0        0        2         1        *         ?        *
        //表示在每月的1日的凌晨2点调整任务
        //  0/5       *       *         *        *         ?
        //上面表达式每隔5秒执行一次
//@Component
public class RedisDataPersistenceJob {

    @Reference
    private IStrategyStatisVOService strategyStatisVOService;
    @Reference
    private IStrategyDetailService strategyDetailService;


    //@Scheduled就是用来指定某个方法按照指定的时间的计划定时执行
    @Scheduled(cron ="0/10 * * * * ?")  //cron代表的是时间计划的表达式
    public void doWork(){
        System.out.println("------------持久化开始-----------------");
        //攻略统计数据的持久化
        //获取所有攻略数据vo对象
        List<StrategyStatisVO> list = strategyStatisVOService.listStrategyStaticVO(
                RedisKeys.STRATEGY_STATICS_VO.join("*")
        );


        //遍历,同时将这些数据update到 mysql数据库中
        for (StrategyStatisVO vo : list){
            StrategyStatisPersistenceVO pvo = new StrategyStatisPersistenceVO();
            BeanUtil.copyProperties(pvo,vo);
            strategyDetailService.updateStrategyStatisVO(pvo);
        }
        System.out.println("------------持久化结束-----------------");
    }
}
